package fr.mma.livraison;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import com.google.gson.Gson;

import fr.mma.achievement.controller.AchievementsManager;
import fr.mma.livraison.controller.Factory;
import fr.mma.livraison.controller.LivraisonController;
import fr.mma.livraison.controller.DevController;
import fr.mma.livraison.model.EtatLivraison;
import fr.mma.livraison.model.dto.LivraisonApplicationDTO;
import fr.mma.livraison.model.dto.reponse.ReponseDTO;
import fr.mma.livraison.model.dto.reponse.ReponseOK;
import fr.mma.livraison.model.persistence.Application;
import fr.mma.livraison.model.persistence.Developpeur;
import fr.mma.livraison.model.persistence.LivraisonApplication;

@SuppressWarnings("serial")
public class LivraisonApplicationServlet extends AbstractServlet<LivraisonApplicationDTO> {

	@Override
	public void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
		resp.setContentType("application/json");
		final LivraisonController livraisonController = new LivraisonController();
		final LivraisonApplication livraisonApp = livraisonController.getLivraisonApplication(req.getParameter("id"));
		Developpeur developpeur = null;
		if (livraisonApp.getDeveloppeur() != null) {
			final DevController controller = new DevController();
			developpeur = controller.getDevId(livraisonApp.getDeveloppeur().getName());
		}
		Application application = null;
		if (livraisonApp.getApplication() != null) {
			application = livraisonController.getApplication(livraisonApp.getApplication().getName());
		}
		final Gson gson = new Gson();
		final String json = gson.toJson(Factory.build(livraisonApp, developpeur, application));
		resp.getWriter().println(json);
	}

	@Override
	protected ReponseDTO postDTO(final LivraisonApplicationDTO livraisonApp, final String utilisateur) {
		final LivraisonController controller = new LivraisonController();
		if(livraisonApp.getDeveloppeur() == null || StringUtils.isEmpty(livraisonApp.getDeveloppeur().getTrigram())){
			livraisonApp.setEtat(EtatLivraison.PAS_COMMENCE);
		}
		livraisonApp.setEnCours(EtatLivraison.EN_COURS.equals(livraisonApp.getEtat()));
		controller.save(livraisonApp);
		if(!livraisonApp.isEnCours()){
			AchievementsManager.update(livraisonApp);
		}
		return new ReponseOK(livraisonApp);
	}

	@Override
	protected void postEmpty(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
		//ras
	}

	@Override
	protected Class<LivraisonApplicationDTO> getDTOClass() {
		return LivraisonApplicationDTO.class;
	}


	@Override
	protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		final String idList = req.getParameter("idList");
		if (StringUtils.isNotBlank(idList)) {
			final LivraisonController livraisonController = new LivraisonController();
			final Gson gson = new Gson();
			String[] dto = gson.fromJson(idList, String[].class);
			for (String id : dto) {
				livraisonController.deleteLivraisonApplication(id);
			}
		}
	}
}
